package java_thinking.unit_21._21_4;

import java_thinking.unit_21._21_2.Widget;
import net.jcip.annotations.GuardedBy;

/**
 * @Desc:   4-3 通过一个私有锁来保护状态
 *              优点： 1.私有的锁对象可以将锁封装起来，使客户代码无法得到锁，但客户代码可以通过共有方法来访问锁，
 *                       以便参与到它的同步策略中，如果客户代码错误的获得了另外一个对象的锁，那么可能会产生活跃性问题；
 *                     2.要想验证某个共有访问的锁在程序中是否被正确地使用，则需要检查整个程序，而不是单个类
 *
 * @author: cww
 * @DateTime: 2019-06-02 16:28
 */

public class PrivateLock {
    private final Object myLock = new Object();
    @GuardedBy("this") Widget widget;
    void someMethod() {
        synchronized (myLock) {
            //访问或者修改 Widget 的状态；
        }
    }
}
